package com.weimin.mqtt.server.model;

import com.weimin.mqtt.server.handler.IMqttUserAuthHandler;
import com.weimin.mqtt.server.listener.IMqttSessionListener;
import lombok.Data;

@Data
public class MqttServerConfig {

    /**
     * 监听的端口
     */
    private Integer port;
    /**
     * 消息监听的接口实现实例
     */
    private IMqttSessionListener sessionListener;
    /**
     * 校验客户端身份的接口实现实例
     */
    private IMqttUserAuthHandler userAuthHandler;
    /**
     * 负责接收accept消息的线程数
     */
    private Integer bossThreadNumber = 1;
    /**
     * 负责处理事务的线程数，缺省是cpu的核心*2个数量，传0或负数则为缺省，大于100的数则为100
     */
    private Integer workThreadNumber = Runtime.getRuntime().availableProcessors();
    /**
     * 判断是否离线的时间间隔，缺省是90秒
     */
    private Integer checkOfflineInterval = 90;
    /**
     * 最大一次性接收的报文长度，如果是图片之类的，这个值要设大一点，缺省是102400字节
     */
    private Integer maxBytesInMessage = 102400;
    /**
     * 缺省不支持 SSL
     */
    private boolean ssl = false;
    /**
     * CA证书文件，一般叫ca.crt
     * 指令参考：openssl req -new -x509 -keyout ca.key -out ca.crt -days 36500
     */
    private String caCertFile;
    /**
     * an X.509 certificate chain file in PEM format
     * server证书文件，一般叫server.crt
     * 指令参考：openssl x509 -req -days 36500 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt
     * ，如果需要和域名或ip绑定需要加上 -extfile <(printf "subjectAltName=IP:127.0.0.1")
     */
    private String serverCertFile;
    /**
     * a PKCS#8 private key file in PEM format
     * 私钥文件，因为netty只支持pkcs8，所以需要2个步骤，第二个步骤改成pkcs8格式
     * openssl genrsa -des3 -out server.key 1024
     * openssl pkcs8 -topk8 -in server.key -out pkcs8_server.key -nocrypt
     */
    private String keyFile;

}
